package com.ruoyi.carApi.api;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.ptr.IntByReference;


public interface JNADll extends Library {
	

	String strdir = "C:\\icel\\dll\\ice_ipcsdk.dll";

    JNADll ICESDKInstance = (JNADll) Native.loadLibrary(strdir, JNADll.class);
    /**
     *  @brief  全局初始化
     *  @return void
     */
    public void ICE_IPCSDK_Init();

    /**
     *  @brief  全局释放
     *  @return void
     */
    public int ICE_IPCSDK_Fini();

    /**
     *  @brief  连接相机，不带视频流
     *  @param  [IN] pcIP   相机ip
     *  @return sdk句柄(连接不成功时，返回值为null）
     */
    public Pointer ICE_IPCSDK_OpenDevice(String ip);

    /**
     *  @brief  断开连接
     *  @param  [IN] hSDK   连接相机时返回的句柄值
     *  @return void
     */
    public void ICE_IPCSDK_Close(Pointer hSDK);

    /**
     *  @brief  连接视频
     *  @param  [IN] hSDK           连接相机时返回的句柄值
     *  @param  [IN] u8MainStream   是否请求主码流（1：主码流 0：子码流）
     *  @param  [IN] hWnd           预览视频的窗口句柄
     *  @return 1表示成功，0表示失败
     */
    public int ICE_IPCSDK_StartStream(Pointer hSDK, int u8MainStream, WinDef.HWND hWnd);

    /**
     *  @brief  断开视频
     *  @param  [IN] hSDK   连接相机时返回的句柄值
     *  @return void
     */
    public void ICE_IPCSDK_StopStream(Pointer hSDK);

    /**
     *  @brief  软触发扩展接口
     *  @param  [IN]  hSDK          由连接相机接口获得的句柄
     *  @return 1表示成功，0表示失败
     */
    public int ICE_IPCSDK_TriggerExt(Pointer hSDK);

    /**
     *  @brief  打开道闸
     *  @param  [IN] hSDK  SDK句柄
     *  @return 1 成功 0 失败
     */
    public int ICE_IPCSDK_OpenGate(Pointer hSDK);

    /**
     *  @brief  设置获得实时识别数据的相关回调函数
     *  @param  [IN] hSDK       连接相机时返回的sdk句柄
     *  @param  [IN] pfOnPlate  实时识别数据，通过该回调获得
     *  @param  [IN] pvParam    回调函数中的参数，能区分开不同的使用者即可
     *  @return void
     */
    public void ICE_IPCSDK_SetPlateCallback(Pointer hSDK, IPlateCallback callback, int param);



    /**
     *  @brief  车牌识别回调信息输出编码配置
     *  @param  [IN] hSDK       连接相机时返回的sdk句柄
     *  @param  [IN] enable		是否以UTF-8编码输出抓拍信息（1：UTF8格式输出车牌号，0：GB2312格式输出车牌号）
     *  return  void
     */
    public void ICE_IPCSDK_EnableUTF8(Pointer hSDK, int enable);
    /**
     *  @brief  添加黑名单项
     *  @param  [IN] hSDK             连接相机时返回的sdk句柄
     *  @param  [IN] pcNumber        黑名单项中的车牌号
     *  @param  [IN] pcDateBegin     黑名单项中的开始日期(格式为yyyy/MM/dd)
     *  @param  [IN] pcDateEnd       黑名单项中的结束日期(格式为yyyy/MM/dd)
     *  @param  [IN] pcTimeBegin     黑名单项中的开始时间(格式为HH:mm:ss)
     *  @param  [IN] pcTimeEnd       黑名单项中的结束时间(格式为HH:mm:ss)
     *  @param  [IN] pcRemark        备注
     *  @param  [IN] pcRsrv2         预留字段2
     *  @param  [IN] pcRsrv3         预留字段3
     *  @param  [IN] pcRsrv4         预留字段4
     *  @return 1 添加成功 0 添加失败
     */
    int ICE_IPCSDK_InsertWhiteItem(Pointer hSDK, String pcNumber, String pcDateBegin, String pcDateEnd, String pcTimeBegin, String pcTimeEnd, String pcRemark, String pcRsrv2, String pcRsrv3, String pcRsrv4);

    /**
     * 删除白名单
     */
    int ICE_IPCSDK_DeleteWhiteItem(Pointer hSDK, String pcNumber);


    /**
     *  @brief  添加黑白名单项(以车牌号为索引)
     *  @param  [IN] hSDK              连接相机时返回的sdk句柄
     *  @param  [IN] pcNumber          黑白名单项中的车牌号
     *  @param  [IN] pcDateBegin       黑白名单项中的开始日期(格式为yyyy/MM/dd)
     *  @param  [IN] pcDateEnd         黑白名单项中的结束日期(格式为yyyy/MM/dd)
     *  @param  [IN] pcTimeBegin       黑白名单项中的开始时间(格式为HH:mm:ss)
     *  @param  [IN] pcTimeEnd         黑白名单项中的结束时间(格式为HH:mm:ss)
     *  @param  [IN] pcType            名单类型（白名单"W"/黑名单"B"）
     *  @param  [IN] pcRemark          备注
     *  @param  [IN] pcRsrv2           预留字段2
     *  @param  [IN] pcRsrv3           预留字段3
     *  @param  [IN] pcRsrv4           预留字段4
     *  @return 1 添加成功 0 添加失败
     */
    public int ICE_IPCSDK_WhiteListInsertItem_ByNumber(Pointer hSDK, String pcNumber, String pcDateBegin, String pcDateEnd, String pcTimeBegin, String pcTimeEnd, String pcType, String pcRemark, String pcRsrv2, String pcRsrv3, String pcRsrv4);


    /**
     *  @brief  删除黑白名单项(以车牌号为索引)
     *  @param  [IN] hSDK              连接相机时返回的sdk句柄
     *  @param  [IN] pcNumber          要删除的车牌号
     *  @return 1 删除成功 0 删除失败
     */
    public int  ICE_IPCSDK_WhiteListDeleteItem_ByNumber(Pointer hSDK, String pcNumber);


    /**
     *  @brief  获取白名单项总数(包括黑白名单)
     *          注意事项: 在使用任何白名单操作前,都需调用此接口,用于分配内存
     *  @param  [IN]  hSDK         连接相机时返回的sdk句柄
     *  @param  [OUT] pu32Count    白名单项总数
     *  @return 1 成功 0 失败
     */
    public int ICE_IPCSDK_WhiteListGetCount(Pointer hSDK, IntByReference pu32Count);
    public int ICE_IPCSDK_GetWhiteCount(Pointer hSDK, IntByReference  pu32Count);

    public int  ICE_IPCSDK_GetWhiteItem(Pointer hSDK, int index,byte[] carNo, byte[] pcDateBegin, byte[] pcDateEnd, byte[] pcTimeBegin, byte[] pcTimeEnd, byte[] pcRemark, byte[] pcRsrv2, byte[] pcRsrv3, byte[] pcRsrv4);
    /**
     *  @brief  获得相机mac地址
     *  @param  [IN] hSDK                  连接相机时返回的sdk句柄
     *  @param  [OUT] szDevID              相机mac地址
     *  @return 0 失败 1 成功
     */
    public int  ICE_IPCSDK_GetDevID(Pointer hSDK, byte [] szDevID);
}
